<?php
declare (strict_types = 1);

namespace app\command;

use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;

class Dispatch extends Command
{
    protected function configure()
    {
        // 指令配置
        $this->setName('schedule:run')
            ->setDescription('计划任务分发调度指令');
    }

    protected function execute(Input $input, Output $output)
    {
        // 获取当前时间
        $now = date('Y-m-d H:i:s');
        $file = root_path('app') . 'scheduledTasks.php';
        // 加载app\scheduledTasks.php 文件

        if(file_exists($file)){
            try {
                $jobList = require $file;

                array_filter($jobList, function ($job) use ($now,$output){

                    // 判断class是否存在
                    if(class_exists($job)){

                        $jobClass = new $job;
                        if($jobClass->isDue()){
                            $jobClass->run();
                            $output->info("任务 {$job} 执行完毕，时间：{$now}");
                        }
                    }else{
                        $output->error("class {$job} 不存在");
                    }

                });
                $output->info("本次调度完毕，时间：{$now}");

            }catch (\Exception|\Throwable $e){
                trace($e, 'dispatch-error');
                $output->error('file:' . $e->getFile() . ' line:' . $e->getLine() . ' message:' . $e->getMessage());
            }

        }


    }
}
